/**
 * @file PersonalClinica.java
 * @brief Fichero que contiene la implementacion de la clase PersonalClinica.
 * @author Catalina Pelegrin Gonzalez
 * @version 01.00
*/


package GestorUsuarios;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
//import java.util.Calendar;
import java.util.Date;

import GestorClinico.ControlHorario;
import GestorClinico.ControlHorarioDAO;
import GestorClinico.DiaSemana;
import GestorClinico.HoraTrabajo;
import GestorClinico.HoraTrabajoDAO;

/**
 * @class PersonalClinica
 * @brief Hereda de la clase 'usuario'. Representa a los trabajadores de la clinica.
 */
public class PersonalClinica extends Usuario {
	
	/**
	 * @brief Constructor de la clase: Llama al constructor de Usuario.
	 * @param dnipasaporte Documento Nacional de Identidad para el PersonalClinica del pais y 
	 * Pasaporte para los extranjeros.
	 * @param nombre Nombre del PersonalClinica.
	 * @param apellidos Apellidos del PersonalClinica.
	 * @param fechanacimiento Fecha de nacimiento del PersonalClinica.
	 * @param genero Sexualidad del PersonalClinica: MASCULINO o FEMENINO.
	 * @param correo Correo electronico (e-mail) del PersonalClinica.
	 * @param telefonomovil Numero de contacto movil del PersonalClinica.
	 * @param login Nombre de autentificacion que adquiere el PersonalClinica para poder acceder al sistema.
	 * @param password Clave de acceso del PersonalClinica.
	 * @param estado Situacion en la que se encuentra el PersonalClinica con respecto al centro medico:
	 *  ACTIVO, BAJA_TEMPORAL, BAJA_DEFINITIVA.
	 * @param tipo Tipo de usuario en el sistema.
	 * @throws NoSuchAlgorithmException 
	 */
	public PersonalClinica(String dnipasaporte, String nombre,
			String apellidos, Date fechanacimiento, GeneroUsuario genero,
			String correo, int telefonomovil, String login, String password,
			EstadoUsuario estado, TipoUsuario tipo, String observaciones
                        ) throws NoSuchAlgorithmException {
		super(dnipasaporte, nombre, apellidos, fechanacimiento, genero,
				correo, telefonomovil, login, password, estado, tipo,
                                observaciones);
	}
	
	/**
	 * @brief Constructor de la clase con idusuario: Llama al constructor de Usuario
	 * @param idusuario Identificador numerico del PersonalClinica.
	 * @param dnipasaporte Documento Nacional de Identidad para el PersonalClinica del pais y 
	 * Pasaporte para los extranjeros.
	 * @param nombre Nombre del PersonalClinica.
	 * @param apellidos Apellidos del PersonalClinica.
	 * @param fechanacimiento Fecha de nacimiento del PersonalClinica.
	 * @param genero Sexualidad del PersonalClinica: MASCULINO o FEMENINO.
	 * @param correo Correo electronico (e-mail) del PersonalClinica.
	 * @param telefonomovil Numero de contacto movil del PersonalClinica.
	 * @param login Nombre de autentificacion que adquiere el PersonalClinica para poder acceder al sistema.
	 * @param password Clave de acceso del PersonalClinica.
	 * @param estado Situacion en la que se encuentra el PersonalClinica con respecto al centro medico:
	 *  ACTIVO, BAJA_TEMPORAL, BAJA_DEFINITIVA
	 * @param tipo Tipo de usuario en el sistema.
	 * @throws NoSuchAlgorithmException 
	 */
	public PersonalClinica(int idusuario, String dnipasaporte, String nombre,
			String apellidos, Date fechanacimiento, GeneroUsuario genero,
			String correo, int telefonomovil, String login, String password,
			EstadoUsuario estado, TipoUsuario tipo, String observaciones) throws NoSuchAlgorithmException {
		super(idusuario,dnipasaporte, nombre, apellidos, fechanacimiento, genero,
				correo, telefonomovil, login, password, estado, tipo,observaciones);
		
	}

        public PersonalClinica(){

        }
	/**
	 * @brief Obtiene un listado con las horas de trabajo para un dia de la 
	 * semana indicado como parametro.
	 * @param diaSemana Dia de la semana de entre Lunes,Martes,Miercoles,Jueves,
	 * Viernes,Sabado o Domingo 
	 * @return Vector de HoraTrabajo
	 * @throws ClassNotFoundException 
	 * @throws IOException 
	 * @throws SQLException 
	 * @throws NoSuchAlgorithmException 
	 */
	public HoraTrabajo [] getHorasTrabajo(DiaSemana diaSemana) throws NoSuchAlgorithmException, SQLException, IOException, ClassNotFoundException{
		HoraTrabajo [] hora= HoraTrabajo.getHorasTrabajo(this.getIdUsuario(), diaSemana);
		return hora;
	}

	
	/**
	 * @brief Asigna una hora de trabajo al miembro del personal de la clinica.
	 * @param hora HoraTrabajo
	 * @return Booleano que indica si
	 * @throws IDException 
	 * @throws ClassNotFoundException 
	 * @throws IOException 
	 * @throws SQLException 
	 */
	public boolean setHoraTrabajo(HoraTrabajo [] hora) throws SQLException, IOException, ClassNotFoundException, IDException{
		HoraTrabajoDAO.setHoraTrabajoEmpleado(this.getIdUsuario(), hora);
		return true;
	}
	

	
	/**
	 * @brief Obtiene el control horario del miembro del personal de la clinica en la de la 
	 * fecha indicada como parametro.
	 * @param fecha
	 * @return Vector de ControlHorario
	 * @throws ClassNotFoundException 
	 * @throws IOException 
	 * @throws SQLException 
	 */
	public ControlHorario [] getControlHorario(Date fecha) throws SQLException, IOException, ClassNotFoundException{
		return ControlHorario.get(getIdUsuario(), fecha);
	}
	
	/**
	 * @brief Obtiene el último control horario
	 * @return El último control horario
	 * @throws ClassNotFoundException 
	 * @throws IOException 
	 * @throws SQLException 
	 */
	public ControlHorario  getUltimoControlHorario() throws SQLException, IOException, ClassNotFoundException{
		return ControlHorarioDAO.getUltimo(this.getIdUsuario());
	}
		
	/**
	 * @brief Ficha la hora de entrada al trabajo en la fecha y hora se�alada.
	 * @param fecha
	 * @return Booleano que indica si
	 * @throws ClassNotFoundException 
	 * @throws IOException 
	 * @throws SQLException 
	 */

	public boolean ficharEntrada(Date fecha) throws SQLException, IOException, ClassNotFoundException{
		ControlHorario horario = new ControlHorario(fecha,fecha, this.getIdUsuario());
		ControlHorario.add(horario);
		return true;		
	}
	
	/**
	 * @brief Ficha la hora de salida al trabajo en la fecha y hora se�alada.
	 * @param fecha
	 * @return Booleano que indica si
	 * @throws ClassNotFoundException 
	 * @throws IOException 
	 * @throws SQLException 
	 */
	public boolean ficharSalida(Date fecha) throws SQLException, IOException, ClassNotFoundException{
		ControlHorario horario = getUltimoControlHorario();
		horario.setFechaSalida(fecha);
		ControlHorarioDAO.update(horario);
		return true;		
	}
	
	public boolean eliminarHorasTrabajo() throws SQLException, IOException, ClassNotFoundException, IDException {
		HoraTrabajoDAO.eliminaHorasTrabajo(this.getIdUsuario());
		return true;
	}

}
